﻿
//Linq 扫盲大会


//var users = new List<User>
//{
//    new(){ Name="张三", Roles=new List<Role>(){ new() { Name="管理员" } } },
//    new(){ Name="李四", Roles=new List<Role>()
//                        { 
//                            new() { Name="管理员" },
//                            new() { Name="审核员" } 
//                        } 
//    },
//    new(){ Name="王五", Roles=new List<Role>(){ new() { Name="普通会员" } } },
//    new(){ Name="赵六", Roles=new List<Role>()
//                        { 
//                            new() { Name="管理员" },
//                            new() { Name="审核员" },
//                            new() { Name = "普通会议" } 
//                        } 
//    },
//};


//1. Select 从源数据挑选成为新的数据源（单个对象）


//users.Select(x => x.Name).ToList().ForEach(Console.WriteLine);
//users.Select((x, index) => new { x.Name, index }).ToList().ForEach(item => Console.WriteLine($"{item.index}:{item.Name}"));






//2. SelectMany 从源数据挑选成为新的数据源（集合对象）

//users.SelectMany(user => user.Roles, (user, role) => new { uname= user.Name,rname= role.Name}).ToList().ForEach(item => Console.WriteLine($"{item.uname}:{item.rname}"));


//List<dynamic> list = new List<dynamic>();
//foreach (var user in users)
//{
//    foreach (var role in user.Roles)
//    {
//        list.Add(new { uname = user.Name, rname = role.Name });
//    }
//}










//3. Aggregate 聚合，从一个集合中第一个和第二个运算后，得到一个结果，再带入下一次运算中


//1+2+3+4+5.....+100 = 5050


//1,2,3,4,5,6...


//10000+1=10001
//10001+2=10003
//3+3=6
//6+4=10
//10+5=15
//....


//var range = Enumerable.Range(1, 100);
//var result = range.Aggregate(10000, (first, second) => first + second);

//Console.WriteLine(result);


//var dic=new Dictionary<string, object>()
//{
//    ["name"]="张三",
//    ["age"]=18,
//    ["code"]="123456"
//};

//var result = dic.Select(m => $"{m.Key}={m.Value}").Aggregate((prev, next) => $"{prev}&{next}");

//Console.WriteLine("http://localhost/index?{0}", result);









// 4、LINQ 来做分页




var dataSource = Enumerable.Range(1, 33);

int pageIndex = 1;
int pageSize = 5;


//第一页：1,2,3,4,5,6,7,8,9,10
//第二页：11,12,13,14,15,16,17,18,19,20
//第三页：21,22,23,...29,30


// 1 2-10  3-20   (page-1) * pageSize


do
{
    Console.Write("请输入页码：");
    pageIndex = int.Parse(Console.ReadLine());

    if (pageIndex < 0)
    {
        break;
    }
    var pagedSource = dataSource.Skip((pageIndex - 1) * pageSize).Take(pageSize);

    var totalCount = dataSource.Count();

    //100/10 = 10

    //15 / 10 = 2, 1,2,3.....10, 11,12,13,14,15

    var totalPages = totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;


    Console.WriteLine($"第{pageIndex}页数据：{string.Join(",", pagedSource)}，当前{pageIndex}/每页{pageSize}条 共{totalPages}/{totalCount}条数据");

} while (pageIndex > 0);
Console.WriteLine("退出");

















Console.ReadKey();



class User
{
    public string Name { get; set; }

    public IEnumerable<Role> Roles { get; set; }=new List<Role>();
}

class Role
{
    public string Name { get; set; }
}